package paodekuai

import "gitee.com/yuya000/cards-game-server-go/server"

const (
	MessageTypePlayerJoinEvent = 7001
	MessageTypeReady           = 7002 // 玩家准备请求
	MessageTypeGameStart       = 7003 // 游戏开始请求
	MessageTypeFaPai           = 7004 // 发牌
	MessageTypeChuPai          = 7005 // 出牌
	MessageTypeChuPaiNotice    = 7006 // 需要玩家出牌的通知
	MessageTypeChuPaiCheck     = 7007 // 出牌牌型检查
	MessageTypeJieSuan         = 7008 // 结算消息
	MessageTypeNextRound       = 7010 // 下一轮游戏
	MessageTypeZongJieSuan     = 7011 // 总结算
	MessageTypeGameover        = 7009 // 游戏结束
	MessageTypeExit            = 7012 // 玩家退出
	MessageTypeVoteDissolve    = 7013 // 投票解散消息
	MessageTypeVote            = 7014 // 投票
	MessageTypeGameContinue    = 7015 // 游戏继续
	MessageTypeGameDestroy     = 7016 // 房间被房主解散
	MessageTypePlayerResume    = 7017 // 游戏恢复
	MessageTypePosition        = 7018 // 位置信息
)

// 创建游戏响应
type NewGameResp struct {
	Seq     int    // 玩家序列
	HouseNo string // 游戏编号
}

// 玩家加入的通知消息（其他玩家）
type PlayerJoinNotice struct {
	Seq      int // 序列
	UserInfo *server.UserInfoEntry
	UserClub *server.ClubInfoEntry
}

// 玩家加入游戏的响应（玩家）
type JoinGameResp struct {
	Seq           int                     // 序列
	GameType      string                  // 游戏类型
	HouseNo       string                  // 游戏ID
	Players       []*server.UserInfoEntry // 当前在线玩家
	PlayerClubs   []*server.ClubInfoEntry // 当前在线玩家俱乐部信息
	GameBuildArgs server.Args             // 游戏构建参数
	ReadyPlayers  []string                // 准备好的玩家的ID数组
	Sequence      []string                // 玩家序列
}

// 玩家的准备通知，通知其他玩家
type ReadyNotice struct {
	Id string // 准备好的玩家
}

type FaPaiNotice struct {
	Pai []string
}

// 玩家出牌上传数据
type ChuPaiReq struct {
	Pai []string
}

// 服务器通知某个玩家出牌
type ChuPaiNotice struct {
	Id string
}

// 某个玩家出牌的群推响应
type ChuPaiResp struct {
	Id              string
	CurrentPai      []string // 上一次出的牌 （不包括 要不起）
	CurrentPaiStyle int      // 上一次出牌的类型（不包括 要不起）
	ChuPai          []string // 上一个玩家的出牌 （包括 要不起）
}

type ChuPaiCheckReq struct {
	Pai []string
}

type ChuPaiCheckResp struct {
	Style int
}

type JieSuanEntry struct {
	Id       string // 玩家ID
	HoldPais int    // 玩家剩余牌数
	Score    int    // 分
}

type JieSuanResp struct {
	Winner        string
	JieSuanEntrys []*JieSuanEntry
}

type ZongJieSuanEntry struct {
	Id    string // 玩家ID
	Bombs int    // 炸弹数
	Wins  int    // 获胜几场
	Score int    // 总分
}

type ZongJieSuanResp struct {
	ZongJieSuanEntrys []*ZongJieSuanEntry
}

type ExitNotice struct {
	Id string
}

type VoteNotice struct {
	Id string
}

type VoteReq struct {
	YesOrNo string
}

type VoteResp struct {
	Id      string
	YesOrNo string
}

type PlayerResumeEvent struct {
	GameType            string                           // 游戏类型
	No                  string                           // 房间编号
	Status              int                              // 游戏状态
	Rules               server.Args                      // 游戏构建参数
	Owner               string                           // 房主ID
	MaxRound            int                              // 总局数
	CurrentRound        int                              // 当前局数
	ReadyPlayer         []string                         // 准备好的玩家
	PlayerHoldingPai    []string                         // 当前玩家持有的牌
	GameExitBallotBox   map[string]string                // 游戏退出投票情况
	Players             []*server.UserInfoEntry          // 玩家信息
	PlayersClubInfo     map[string]*server.ClubInfoEntry // 玩家俱乐部信息
	LostPlayer          []string                         // 掉线玩家信息
	CurrentChuPaiPlayer string                           // 当前应该出牌的玩家ID
	LastPai             []string                         // 最后一次出牌信息
	LastPaiStyle        int                              // 最后一次出牌类型
	OtherPlayerPais     map[string]int                   // 玩家剩余牌数
	Sequence            []string                         // 玩家座位顺序
	SelfSeq             int                              // 自己的座位号码
}

type PlayerResumeNoticeEvent struct {
	Id string
}

type PositionReq struct {
	Id string
}

type PositionResp struct {
	Position int
}
